﻿//========================================================= 
/**@file EasyArgParser.h
 * @brief 
 * 
 * @date 2017-11-30   22:52:05
 * @author Zhyioo 
 * @version 1.0
 */ 
//--------------------------------------------------------- 
#ifndef _LIBZHOUYB_EASYARGPARSER_H_
#define _LIBZHOUYB_EASYARGPARSER_H_
//--------------------------------------------------------- 
#include "../../json\json_extractor.h"
using namespace zhou_yb::json_extractor;
//--------------------------------------------------------- 
namespace zhou_yb {
namespace application {
namespace tools {
//--------------------------------------------------------- 
/**
 * @brief 兼容Json和[]格式的转换器
 * @date 2017-11-30 22:54:45
 */
class EasyArgParser : public IStringArgParser, public RefObject
{
protected:
    JsonArgParser _jsonParser;
    ArgParser _argParser;
    Ref<IStringArgParser> _refParser;
public:
    EasyArgParser()
    {
        _refParser = _argParser;
    }
    virtual size_t Parse(const ByteArray& str, IStringArguments& arg)
    {
        if(str.IsEmpty())
            return 0;
        if(str[0] == '{')
            _refParser = _jsonParser;
        else
            _refParser = _argParser;
        return _refParser->Parse(str, arg);
    }
    virtual size_t ToString(const IStringArguments& arg, ByteBuilder& str)
    {
        return _refParser->ToString(arg, str);
    }
};
//--------------------------------------------------------- 
} // namespace tools
} // namespace application
} // namespace zhou_yb
//--------------------------------------------------------- 
#endif // _LIBZHOUYB_EASYARGPARSER_H_
//========================================================= 